/**
 * Created by PanJiaChen on 16/11/18.
 */

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal (path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
   * @param {string} str
   * @returns {Boolean}
   */
export function validUsername (str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/**
   * @param {string} url
   * @returns {Boolean}
   */
export function validURL (url) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

/**
   * @param {string} str
   * @returns {Boolean}
   */
export function validLowerCase (str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/**
   * @param {string} str
   * @returns {Boolean}
   */
export function validUpperCase (str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/**
   * @param {string} str
   * @returns {Boolean}
   */
export function validAlphabets (str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
   * @param {string} email
   * @returns {Boolean}
   */
export function validEmail (email) {
  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(email)
}

/**
   * @param {string} str
   * @returns {Boolean}
   */
export function isString (str) {
  if (typeof str === 'string' || str instanceof String) {
    return true
  }
  return false
}

/**
   * @param {Array} arg
   * @returns {Boolean}
   */
export function isArray (arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}
export function changeTime (value) {
  return value.split('T')[0]
}
/**
   * 校验手机号
   * @param {Number} phone
   * @returns {Boolean}
   */
export function checkPhone (phone) {
  const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  return reg.test(phone)
}
/**
   * 校验登录手机号
   * @param {Number} phone
   * @returns {Boolean}
   */
export function checkLoginPhone (phone) {
  const reg = /^[0-9]{6,15}$/
  return reg.test(phone)
}
/**
   * 校验密码
   * @param {Number} password
   * @returns {Boolean}
   */
export function checkPassword (password) {
  const reg = /^(?![A-Za-z]+$)(?![A-Z\d]+$)(?![A-Z\W]+$)(?![a-z\d]+$)(?![a-z\W]+$)(?![\d\W]+$)\S{8,16}$/
  return reg.test(password)
}
/**
   * 校验展位账号
   * @param {Number} boothName
   * @returns {Boolean}
   */
export function checkBoothName (boothName) {
  const reg = /^(sh|SH|Sh|sH)[0-9]{6}$/g
  return reg.test(boothName)
}
/**
   * input 防抖
   * @param {function} fn
   * @param {time} wait
   * @returns
   */
export function debounce (fn, wait) {
  let timeout = null
  wait = wait || 600
  return function () {
    const that = this
    if (timeout !== null) clearTimeout(timeout)
    timeout = setTimeout(() => {
      fn.apply(that)
    }, wait)
  }
}
/**
   * 手机号中间加密星号
   * @param {Number} mobile
   * @returns
   */
export function mobileStar (mobile) {
  var tel = String(mobile)
  var dh = tel.substr(0, 3) + '****' + tel.substr(7)
  return dh
}
/**
   * 校验密码
   */
export function validatePass (rule, value, callback) {
  const pwdReg = /^(?![A-Za-z]+$)(?![A-Z\d]+$)(?![A-Z\W]+$)(?![a-z\d]+$)(?![a-z\W]+$)(?![\d\W]+$)\S{8,16}$/
  if (!value) {
    callback(new Error('请输入密码'))
  } else {
    if (!pwdReg.test(value)) {
      callback(new Error('8-16位字符，至少包含数字 大小写字母 或特殊符号的任意三个'))
    }
    callback()
  }
}
/**
   * 校验邮箱
   */
export function validateEmail (rule, value, callback) {
  const emailReg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
  if (!value) {
    callback(new Error('请输入邮箱'))
  } else {
    if (!emailReg.test(value)) {
      callback(new Error('请正确设置邮箱'))
    }
    callback()
  }
}
/**
   * 校验手机号
   */
export function validateMobile (rule, value, callback) {
  const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  if (!value) {
    callback(new Error('请输入手机号'))
  } else {
    if (!reg.test(value)) {
      callback(new Error('手机号格式不正确'))
    }
    callback()
  }
}
/**
   * 校验手机号或座机号
   */
export function validateMobileAndPhone (rule, value, callback) {
  var isPhone = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  var isMob = /^([0-9]{3,4}-)?[0-9]{7,8}$/
  if (!value) {
    callback(new Error('请输入手机号或座机号'))
  } else {
    if (isPhone.test(value) || isMob.test(value)) {
      callback()
    } else {
      callback(new Error('手机号或座机号格式不正确'))
    }
    callback()
  }
}
/**
   * 校验数字+字符
   */
export function validateNumberAndString (rule, value, callback) {
  var isPhone = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  const reg = /^(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{1,20}$/
  if (!value) {
    callback(new Error('请输入采购者电话'))
  } else {
    if (!isPhone.test(value) && !reg.test(value)) {
      callback(new Error('请输入正确的采购者电话'))
    }
    callback()
  }
}
/**
   * 校验数字
   */
export function validateNumber (rule, value, callback) {
  var isPhone = /^[0-9]{0,80}$/
  if (!value) {
    callback(new Error('请输入手机号或座机号'))
  } else {
    if (isPhone.test(value)) {
      callback()
    } else {
      callback(new Error('手机号或座机号格式不正确'))
    }
    callback()
  }
}
/**
   * 校验试剂CAS号
   */
export function validateCAS (rule, value, callback) {
  const reg = /^[0-9]{1,}-[0-9]{1,}-[0-9]{1,}$/
  if (!value) {
    callback(new Error('请输入CAS号'))
  } else {
    if (!reg.test(value)) {
      callback(new Error('CAS号格式错误，限制格式为xxxx-xxx-xxx（x为数字）'))
    }
    callback()
  }
}
/**
   * 校验姓名(仅支持中文和英文组合)
   */
export function validateName (rule, value, callback) {
  const reg = /^[\u4e00-\u9fa5_a-zA-Z]+$/
  if (!value) {
    callback(new Error('请输入姓名'))
  } else {
    if (!reg.test(value)) {
      callback(new Error('姓名格式错误,限制中英文'))
    }
    callback()
  }
}
/**
   * 校验展位账号
   */
export function validateBoothNo (rule, value, callback) {
  const reg = /^(sh|SH|Sh|sH)[0-9]{6}$/g
  if (!value) {
    callback(new Error('请输入SH开头的展位号'))
  } else {
    if (!reg.test(value)) {
      callback(new Error('请输入正确的展位号'))
    }
    callback()
  }
}
